/*!
 * \brief
 * \author
 */
#ifndef RSALGORITHM_H
#define RSALGORITHM_H

#include "rsalgorithm_global.h"
#include "../RSCommon/rsfunction.h"

#include <string>
#include <vector>

/*!
 * \brief The RSAlgorithm class 图像处理基类，其他算法继承该类
 */
class RSALGORITHMSHARED_EXPORT RSAlgorithm
{

public:
    RSAlgorithm();

    /*!
     * \brief setInputImg 设置输入影像
     * \param pInputImg 输入影像路径
     * \return 如果设置成功，则返回真，否则返回假
     */
    bool setInputImg(const char* pInputImg);

    /*!
     * \brief setInputImg 设置输入影像
     * \param inputImg 输入影像路径
     * \return 如果设置成功，则返回真，否则返回假
     */
//    bool setInputImg(std::string inputImg);

    /*!
     * \brief setInputImg 设置输入影像数组
     * \param inputImgVec 输入影像路径数组
     * \return 如果设置成功，则返回真，否则返回假
     */
    bool setInputImg(std::vector<std::string> inputImgVec);

    /*!
     * \brief setOutputImg 设置输出影像
     * \param pOutputImg 输出影像路径
     * \return 如果设置成功，则返回真，否则返回假
     */
    bool setOutputImg(const char* pOutputImg);

    /*!
     * \brief setOutputImg 设置输出影像
     * \param outputImg 输出影像路径
     * \return 如果设置成功，则返回真，否则返回假
     */
    bool setOutputImg(std::string outputImg);

    /*!
     * \brief setOutputImg 设置输出影像
     * \param outputImgVec 输出影像路径数组
     * \return 如果设置成功，则返回真，否则返回假
     */
    bool setOutputImg(std::vector<std::string> outputImgVec);

    /*!
     * \brief setFunctionCallBack 设置回调函数
     * \param pFuncCallBack 回调函数指针
     * \param pArg
     */
    void setFunctionCallBack(RSFunctionCallBack pFuncCallBack , void* pArg );

    /*!
     * \brief disPose 算法处理过程
     */
    virtual bool disPose();

    /*!
     * \brief getMsg 获取信息，例如错误
     * \return 返回字符串
     */
    const char* getMsg();

    /*!
     * \brief setMsg 设置信息，例如错误
     * \param pMsg 信息字符串
     */
    void setMsg(const char* pMsg);

protected:
    /*!
     * \brief setDisPoseState 设置算法处理状态
     * \param nValue 进程条当前值，范围为0～1000，如果在范围外，则进程条当前值不变
     * \param pMsg
     */
    void setDisPoseState(const int nValue , const char* pMsg);

protected:
    /*!
     * \brief m_InputImgVec 输入影像路径数组
     */
    std::vector<std::string> m_InputImgVec;

    /*!
     * \brief m_OutputImgVec 输出影像路径数组
     */
    std::vector<std::string> m_OutputImgVec;

    /*!
     * \brief m_FuncCallBack 回调函数指针
     */
    RSFunctionCallBack m_FuncCallBack;

    /*!
     * \brief m_pArg 参数，一般为调用进程条和消息显示的类指针
     */
    void* m_pArg;

    /*!
     * \brief m_Msg 信息：包括错误字符串、状态信息等
     */
    std::string m_Msg;
};

#endif // RSALGORITHM_H
